CITY INVENTORIES
library(tidyverse)
library(knitr)
library(kableExtra)
library(gghalves)
library(patchwork)
library(scales)
library(ggmap)
library(osmdata)
Purpose
Data Wrangling
Import Data
portland.parks <- read.csv('https://raw.githubusercontent.com/jmhulbert/redhot/main/data/Portland.Parks.Trees.AF.csv')
portland.streets <- read.csv('https://raw.githubusercontent.com/jmhulbert/redhot/main/data/Portland.Street.Trees.AF.csv')
seattle.combined <- read.csv('https://raw.githubusercontent.com/jmhulbert/redhot/main/data/Seattle.Trees.AF.csv')
Tidy Data
portland.parks <- portland.parks[c(3,4,6,7,8,14,35,36,40,42:45)]
portland.parks <- portland.parks %>% mutate(city.space="Park")
portland.streets <- portland.streets[c(3,4,5,9,10:19)]
portland.streets <- portland.streets %>% mutate(city.space="Street") %>% rename(DBH=DIAMETER) %>% rename(Functional=FUNCTIONAL)
portland.combined <- full_join(portland.streets,portland.parks,by = join_by(OBJECTID, Condition, DN_AF1, lat, lon, DBH,city.space,Functional)) %>% mutate(city="Portland") %>% mutate(DN_AFc=DN_AF1)
portland.combined$DN_AF1 <- ((portland.combined$DN_AF1 * 1.8) +32)
seattle.combined <- seattle.combined[c(1:8,11:14,17:19)] %>% mutate(city="Seattle") %>% rename(GlobalID=GLOBALID)
seattle.streets <- seattle.combined %>% filter(Source.Department=="Seattle Department of Transportation") %>% mutate(city.space="Street")
seattle.parks <- seattle.combined %>% filter(Source.Department=="Seattle Parks and Recreation") %>% mutate(city.space="Park")
seattle.combined.back <- rbind(seattle.streets,seattle.parks)
Categorize Trees
- Portland Top-Dieback Probability Categories (10%)
- Most Concern (>10%): > 88.5
- Moderate Concern (2.5-10%): 84.32-88.5
- Lowest Concern (<2.5%): <84.32
- Portland Dieback Probability Cateogories (25%)
- Most Concern (>25%): >91.66
- Moderate Concern (5-25%): 86.48- 91.66
- Lowest Concern (<5%): <86.48
portland.most <- portland.combined %>% filter(DN_AF1>88.5)%>% mutate(Category1="Most Concern") %>% droplevels()
portland.mod <- portland.combined %>% filter(DN_AF1>84.32 & DN_AF1<88.5) %>% mutate(Category1="Moderate Concern") %>% droplevels()
portland.low <- portland.combined %>% filter(DN_AF1<84.32) %>% mutate(Category1="Lowest Concern") %>% droplevels()
portland.combined.cat <- bind_rows(list(portland.low,portland.mod,portland.most))
portland.most <- portland.combined.cat %>% filter(DN_AF1>86.5)%>% mutate(Category1Plus2="Most Concern") %>% droplevels()
portland.mod <- portland.combined.cat %>% filter(DN_AF1>82.32 & DN_AF1<86.5) %>% mutate(Category1Plus2="Moderate Concern") %>% droplevels()
portland.low <- portland.combined.cat %>% filter(DN_AF1<82.32) %>% mutate(Category1Plus2="Lowest Concern") %>% droplevels()
portland.combined.cat <- bind_rows(list(portland.low,portland.mod,portland.most))
portland.most <- portland.combined.cat %>% filter(DN_AF1>91.66)%>% mutate(Category25="Most Concern") %>% droplevels()
portland.mod <- portland.combined.cat %>% filter(DN_AF1>86.48 & DN_AF1<91.66) %>% mutate(Category25="Moderate Concern") %>% droplevels()
portland.low <- portland.combined.cat %>% filter(DN_AF1<86.48) %>% mutate(Category25="Lowest Concern") %>% droplevels()
portland.combined.cat <- bind_rows(list(portland.low,portland.mod,portland.most))
- King County Top-Dieback Probability Categories (10%)
- Most Concern (>10%): >87.8
- Moderate Concern (2.5-10%): 85.22-87.8
- Lowest Concern (<2.5%): <85.22
- King County Top-Dieback Probability Categories (25%)
- Most Concern (>25%): 89.78
- Moderate Concern (5-25%): 86.5 - 89.78
- Lowest Concern (<5%): <86.5
seattle.most <- seattle.combined.back %>% filter(DN_AF1>87.8)%>% mutate(Category1="Most Concern") %>% droplevels()
seattle.mod <- seattle.combined.back %>% filter(DN_AF1>85.22 & DN_AF1<87.8) %>% mutate(Category1="Moderate Concern") %>% droplevels()
seattle.low <- seattle.combined.back %>% filter(DN_AF1<85.22) %>% mutate(Category1="Lowest Concern") %>% droplevels()
seattle.combined.cat <- bind_rows(list(seattle.low,seattle.mod,seattle.most))
seattle.most <- seattle.combined.cat %>% filter(DN_AF1>85.8)%>% mutate(Category1Plus2="Most Concern") %>% droplevels()
seattle.mod <- seattle.combined.cat%>% filter(DN_AF1>83.22 & DN_AF1<85.8) %>% mutate(Category1Plus2="Moderate Concern") %>% droplevels()
seattle.low <- seattle.combined.cat %>% filter(DN_AF1<83.22) %>% mutate(Category1Plus2="Lowest Concern") %>% droplevels()
seattle.combined.cat <- bind_rows(list(seattle.low,seattle.mod,seattle.most))
seattle.most <- seattle.combined.cat %>% filter(DN_AF1>89.78)%>% mutate(Category25="Most Concern") %>% droplevels()
seattle.mod <- seattle.combined.cat %>% filter(DN_AF1>86.5 & DN_AF1<89.78) %>% mutate(Category25="Moderate Concern") %>% droplevels()
seattle.low <- seattle.combined.cat%>% filter(DN_AF1<86.5) %>% mutate(Category25="Lowest Concern") %>% droplevels()
seattle.combined.cat <- bind_rows(list(seattle.low,seattle.mod,seattle.most))
87 trees in Seattle did not have UHI data. 1 tree in Portland did not
have UHI data.
Join City Data
cities <- full_join(seattle.combined.cat,portland.combined.cat,by = join_by(OBJECTID, DBH, DN_AF1, lat, lon, city, city.space,GlobalID,Category1,Category1Plus2,Category25))
Summarize Data
summary <- cities %>% group_by(city,Category1) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
summary
## # A tibble: 6 × 5
## # Groups: city [2]
## city Category1 n meanAF n_AF_na
## <chr> <chr> <int> <dbl> <int>
## 1 Portland Lowest Concern 173 83.2 0
## 2 Portland Moderate Concern 1029 87.5 0
## 3 Portland Most Concern 1476 89.1 0
## 4 Seattle Lowest Concern 49 84.2 0
## 5 Seattle Moderate Concern 1639 87.0 0
## 6 Seattle Most Concern 915 88.4 0
ggplot(summary,aes(n,Category1,fill=Category1))+geom_col(alpha=0.7) +facet_wrap(~city) +theme_bw() + scale_fill_manual(name="Category",values=c("#7fcdbb","#fe9929","#DDA0DD")) +labs(x="Number of Trees",y="Concern Category") +guides(fill="none")

summary <- cities %>% group_by(city,city.space,Category1) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city', 'city.space'. You can override
## using the `.groups` argument.
summary
## # A tibble: 12 × 6
## # Groups: city, city.space [4]
## city city.space Category1 n meanAF n_AF_na
## <chr> <chr> <chr> <int> <dbl> <int>
## 1 Portland Park Lowest Concern 89 83.3 0
## 2 Portland Park Moderate Concern 266 87.6 0
## 3 Portland Park Most Concern 609 89.1 0
## 4 Portland Street Lowest Concern 84 83.2 0
## 5 Portland Street Moderate Concern 763 87.5 0
## 6 Portland Street Most Concern 867 89.0 0
## 7 Seattle Park Lowest Concern 5 83.8 0
## 8 Seattle Park Moderate Concern 434 87.1 0
## 9 Seattle Park Most Concern 371 88.5 0
## 10 Seattle Street Lowest Concern 44 84.3 0
## 11 Seattle Street Moderate Concern 1205 87.0 0
## 12 Seattle Street Most Concern 544 88.4 0
ggplot(summary,aes(n,city.space,fill=Category1))+geom_col(position=position_dodge(),alpha=0.7) +facet_wrap(~city) +theme_bw() + scale_fill_manual(name="Category",values=c("#7fcdbb","#fe9929","#DDA0DD")) +labs(x="Number of Trees",y="Tree Inventory")

summary <- cities %>% group_by(city,Category1) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
summary
## # A tibble: 6 × 5
## # Groups: city [2]
## city Category1 n meanAF n_AF_na
## <chr> <chr> <int> <dbl> <int>
## 1 Portland Lowest Concern 173 83.2 0
## 2 Portland Moderate Concern 1029 87.5 0
## 3 Portland Most Concern 1476 89.1 0
## 4 Seattle Lowest Concern 49 84.2 0
## 5 Seattle Moderate Concern 1639 87.0 0
## 6 Seattle Most Concern 915 88.4 0
Portland
pp <- ggplot(portland.combined.cat, aes(x=DN_AF1))+geom_histogram() +theme_bw() +labs(y="Number of Trees",x="Afternoon Temperature (F)")
pp2 <- pp + annotate(geom="rect",ymin = -Inf, ymax = Inf,
xmin = -Inf, xmax = 84.32, fill = alpha('#DDA0DD',0.5)) +
annotate(geom="rect",ymin = -Inf, ymax = Inf,
xmin = 84.32, xmax = 88.5, fill = alpha('#7fcdbb',0.5)) +
annotate(geom="rect",ymin = -Inf, ymax = Inf,
xmin = 88.5, xmax = Inf, fill = alpha('#fe9929',0.5))
pp3 <- pp2 + annotate("text", x=82.3, y=280, label= "Lowest\nConcern") + annotate("text", x=86.3, y=280, label= "Moderate\nConcern") + annotate("text", x=90.1, y=280, label= "Most\nConcern")
pp3
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

summary1 <- portland.combined.cat %>% group_by(city.space,Category1) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city.space'. You can override using the
## `.groups` argument.
summary1
## # A tibble: 6 × 5
## # Groups: city.space [2]
## city.space Category1 n meanAF n_AF_na
## <chr> <chr> <int> <dbl> <int>
## 1 Park Lowest Concern 89 83.3 0
## 2 Park Moderate Concern 266 87.6 0
## 3 Park Most Concern 609 89.1 0
## 4 Street Lowest Concern 84 83.2 0
## 5 Street Moderate Concern 763 87.5 0
## 6 Street Most Concern 867 89.0 0
summary1Plus2 <- portland.combined.cat %>% group_by(city.space,Category1Plus2) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city.space'. You can override using the
## `.groups` argument.
summary1
## # A tibble: 6 × 5
## # Groups: city.space [2]
## city.space Category1 n meanAF n_AF_na
## <chr> <chr> <int> <dbl> <int>
## 1 Park Lowest Concern 89 83.3 0
## 2 Park Moderate Concern 266 87.6 0
## 3 Park Most Concern 609 89.1 0
## 4 Street Lowest Concern 84 83.2 0
## 5 Street Moderate Concern 763 87.5 0
## 6 Street Most Concern 867 89.0 0
summary25 <- portland.combined.cat %>% group_by(city.space,Category25) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city.space'. You can override using the
## `.groups` argument.
summary25
## # A tibble: 4 × 5
## # Groups: city.space [2]
## city.space Category25 n meanAF n_AF_na
## <chr> <chr> <int> <dbl> <int>
## 1 Park Lowest Concern 134 84.1 0
## 2 Park Moderate Concern 830 88.8 0
## 3 Street Lowest Concern 232 84.7 0
## 4 Street Moderate Concern 1482 88.6 0
pp10 <- ggplot(summary1,aes(n,city.space,fill=Category1))+geom_col(position=position_dodge(),alpha=0.7) +theme_bw() + scale_fill_manual(name="Category 1",values=c("#7fcdbb","#fe9929","#DDA0DD")) +labs(title="0.1",x="Number of Trees",y="Tree Inventory")+guides(fill=FALSE)
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
pp11 <- ggplot(summary1Plus2,aes(n,city.space,fill=Category1Plus2))+geom_col(position=position_dodge(),alpha=0.7) +theme_bw() + scale_fill_manual(name="Category 1 plus 2",values=c("#7fcdbb","#fe9929","#DDA0DD")) +labs(title="0.1 plus 2",x="Number of Trees",y="Tree Inventory") +guides(fill=FALSE)
pp12 <- ggplot(summary25,aes(n,city.space,fill=Category25))+geom_col(position=position_dodge(),alpha=0.7) +theme_bw() + scale_fill_manual(name="Category 25",values=c("#7fcdbb","#fe9929","#DDA0DD")) +labs(title="0.25",x="Number of Trees",y="Tree Inventory")
pp10 | pp11 | pp12

Portland Map
portbb <- c(left = min(portland.combined.cat$lon),
bottom = min(portland.combined.cat$lat),
right = max(portland.combined.cat$lon),
top = max(portland.combined.cat$lat))
portmap <- get_map(portbb, zoom = 11, scale = 2, maptype="terrain",source="google")
## ! Bounding box given to Google - spatial extent only approximate.
## ℹ <https://maps.googleapis.com/maps/api/staticmap?center=45.543068,-122.632381&zoom=11&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxx>
portland.map <- ggmap(portmap) + geom_point(data = portland.combined.cat, aes(x = lon, y = lat,fill=DN_AF1), color = "black",pch=21, size = 3) + theme_minimal() +scale_fill_viridis_c(option = "inferno")+labs(title="Portland",x="Longitude",y="Latitude",fill="Afternoon\nTemp (F)") +theme(plot.title = element_text(size = 14, hjust = .5,face = "bold.italic"))
portland.map

portland.map.cat1 <- ggmap(portmap) + geom_point(data = portland.combined.cat, aes(x = lon, y = lat,fill=Category1), color = "black",pch=21, size = 3) + theme_minimal() +scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929"))+labs(title="Portland",x="Longitude",y="Latitude",fill="Conservation\nCategory") +theme(plot.title = element_text(size = 14, hjust = .5,face = "bold.italic"))
portland.map.cat1Plus2 <- ggmap(portmap) + geom_point(data = portland.combined.cat, aes(x = lon, y = lat,fill=Category1Plus2), color = "black",pch=21, size = 3) + theme_minimal() +scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929"))+labs(title="Portland",x="Longitude",y="Latitude",fill="Conservation\nCategory") +theme(plot.title = element_text(size = 14, hjust = .5,face = "bold.italic"))
portland.map.cat25 <- ggmap(portmap) + geom_point(data = portland.combined.cat, aes(x = lon, y = lat,fill=Category25), color = "black",pch=21, size = 3) + theme_minimal() +scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929"))+labs(title="Portland",x="Longitude",y="Latitude",fill="Conservation\nCategory") +theme(plot.title = element_text(size = 14, hjust = .5,face = "bold.italic"))
portland.map.cat1

portland.map.cat1 <- portland.map.cat1 +labs(title="0.1 Probability") + theme(legend.position = "none")
portland.map.cat1Plus2 <- portland.map.cat1Plus2 +labs(title="0.1 Probability at 2 degrees higher") + theme(axis.title.y = element_blank())
portland.map.cat1Plus2.1 <- portland.map.cat1Plus2 +labs(title="0.1 Probability at 2 degrees higher") + theme(legend.position = "none",axis.title.y = element_blank())
portland.map.cat25 <- portland.map.cat25 +labs(title="0.25 Probability") + theme(axis.title.y = element_blank())
portland.map.cat1 + portland.map.cat1Plus2

portland.map.cat1 + portland.map.cat1Plus2.1 + portland.map.cat25

Seattle
sp <- ggplot(seattle.combined.cat, aes(x=DN_AF1))+geom_histogram() +theme_bw() +labs(y="Number of Trees",x="Afternoon Temperature (F)")
sp2 <- sp + annotate(geom="rect",ymin = -Inf, ymax = Inf,
xmin = -Inf, xmax = 84.32, fill = alpha('#DDA0DD',0.5)) +
annotate(geom="rect",ymin = -Inf, ymax = Inf,
xmin = 84.32, xmax = 88.5, fill = alpha('#7fcdbb',0.5)) +
annotate(geom="rect",ymin = -Inf, ymax = Inf,
xmin = 88.5, xmax = Inf, fill = alpha('#fe9929',0.5))
sp3 <- sp2 + annotate("text", x=82.9, y=280, label= "Lowest\nConcern") + annotate("text", x=86.3, y=280, label= "Moderate\nConcern") + annotate("text", x=90.1, y=280, label= "Most\nConcern")
sp3
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

summary1 <- seattle.combined.cat %>% group_by(city.space,Category1) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city.space'. You can override using the
## `.groups` argument.
summary1
## # A tibble: 6 × 5
## # Groups: city.space [2]
## city.space Category1 n meanAF n_AF_na
## <chr> <chr> <int> <dbl> <int>
## 1 Park Lowest Concern 5 83.8 0
## 2 Park Moderate Concern 434 87.1 0
## 3 Park Most Concern 371 88.5 0
## 4 Street Lowest Concern 44 84.3 0
## 5 Street Moderate Concern 1205 87.0 0
## 6 Street Most Concern 544 88.4 0
summary1Plus2 <- seattle.combined.cat %>% group_by(city.space,Category1Plus2) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city.space'. You can override using the
## `.groups` argument.
summary1
## # A tibble: 6 × 5
## # Groups: city.space [2]
## city.space Category1 n meanAF n_AF_na
## <chr> <chr> <int> <dbl> <int>
## 1 Park Lowest Concern 5 83.8 0
## 2 Park Moderate Concern 434 87.1 0
## 3 Park Most Concern 371 88.5 0
## 4 Street Lowest Concern 44 84.3 0
## 5 Street Moderate Concern 1205 87.0 0
## 6 Street Most Concern 544 88.4 0
summary25 <- seattle.combined.cat %>% group_by(city.space,Category25) %>% summarize(n=n(),meanAF=mean(DN_AF1,na.rm=TRUE),n_AF_na=sum(is.na(DN_AF1)))
## `summarise()` has grouped output by 'city.space'. You can override using the
## `.groups` argument.
summary25
## # A tibble: 6 × 5
## # Groups: city.space [2]
## city.space Category25 n meanAF n_AF_na
## <chr> <chr> <int> <dbl> <int>
## 1 Park Lowest Concern 90 86.0 0
## 2 Park Moderate Concern 706 87.9 0
## 3 Park Most Concern 14 90.2 0
## 4 Street Lowest Concern 302 85.8 0
## 5 Street Moderate Concern 1474 87.6 0
## 6 Street Most Concern 17 90.4 0
sp10 <- ggplot(summary1,aes(n,city.space,fill=Category1))+geom_col(position=position_dodge(),alpha=0.7) +theme_bw() + scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929")) +labs(title="0.10",x="Number of Trees",y="Tree Inventory") +guides(fill=FALSE)
sp11 <- ggplot(summary1Plus2,aes(n,city.space,fill=Category1Plus2))+geom_col(position=position_dodge(),alpha=0.7) +theme_bw() + scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929")) +labs(title="0.1 Plus 2",x="Number of Trees",y="Tree Inventory") +guides(fill=FALSE)
sp12 <- ggplot(summary25,aes(n,city.space,fill=Category25))+geom_col(position=position_dodge(),alpha=0.7) +theme_bw() + scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929")) +labs(title="0.25",x="Number of Trees",y="Tree Inventory")
sp10 | sp11 | sp12

Seattle Map
seabb <- c(left = min(seattle.combined.cat$lon),
bottom = min(seattle.combined.cat$lat),
right = max(seattle.combined.cat$lon),
top = max(seattle.combined.cat$lat))
seamap <- get_map(seabb, zoom = 11, scale = 2, maptype="terrain",source="google")
## ! Bounding box given to Google - spatial extent only approximate.
## ℹ <https://maps.googleapis.com/maps/api/staticmap?center=47.616324,-122.334218&zoom=11&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxx>
seattle.map <- ggmap(seamap) + geom_point(data = seattle.combined.cat, aes(x = lon, y = lat,fill=DN_AF1), color = "black",pch=21, size = 3) + theme_minimal() +scale_fill_viridis_c(option = "inferno")+labs(title="Seattle",x="Longitude",y="Latitude",fill="Afternoon\nTemp (F)") +theme(plot.title = element_text(size = 14, hjust = .5,face = "bold.italic"))
seattle.map

seattle.map.cat1 <- ggmap(seamap) + geom_point(data = seattle.combined.cat, aes(x = lon, y = lat,fill=Category1), color = "black",pch=21, size = 3) + theme_minimal() +scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929"))+labs(title="Seattle",x="Longitude",y="Latitude",fill="Conservation\nCategory") +theme(plot.title = element_text(size = 14, hjust = .5,face = "bold.italic"))
seattle.map.cat1Plus2 <- ggmap(seamap) + geom_point(data = seattle.combined.cat, aes(x = lon, y = lat,fill=Category1Plus2), color = "black",pch=21, size = 3) + theme_minimal() +scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929"))+labs(title="Seattle",x="Longitude",y="Latitude",fill="Conservation\nCategory") +theme(plot.title = element_text(size = 14, hjust = .5,face = "bold.italic"))
seattle.map.cat25 <- ggmap(seamap) + geom_point(data = seattle.combined.cat, aes(x = lon, y = lat,fill=Category25), color = "black",pch=21, size = 3) + theme_minimal() +scale_fill_manual(name="Category",values=c("#DDA0DD","#7fcdbb","#fe9929"))+labs(title="Seattle",x="Longitude",y="Latitude",fill="Conservation\nCategory") +theme(plot.title = element_text(size = 14, hjust = .5,face = "bold.italic"))
seattle.map.cat1

seattle.map.cat1 <- seattle.map.cat1 +labs(title="0.1 Probability") + theme(legend.position = "none")
seattle.map.cat1Plus2 <- seattle.map.cat1Plus2 +labs(title="0.1 Probability at 2 degrees higher") + theme(axis.title.y = element_blank())
seattle.map.cat1Plus2.1 <- seattle.map.cat1Plus2 +labs(title="0.1 Probability at 2 degrees higher") + theme(legend.position = "none",axis.title.y = element_blank())
seattle.map.cat25 <- seattle.map.cat25 +labs(title="0.25 Probability") + theme(axis.title.y = element_blank())
seattle.map.cat1 + seattle.map.cat1Plus2

seattle.map.cat1 + seattle.map.cat1Plus2.1 + seattle.map.cat25

seattle.map.cat1 <- seattle.map.cat1 + theme(plot.title = element_blank())
seattle.map.cat1 | sp3
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

portland.map.cat1 <- portland.map.cat1 + theme(plot.title = element_blank(),legend.position = "none")
portland.map.cat1 | pp3
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
